#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>  // 系统错误码
#include "linklist.h"

// 初始化
linklist init_list(void)
{
    linklist head = malloc(sizeof(listnode));
    if(head == NULL)
    {
        perror("初始化失败");
        return NULL;
    }
    
    head->next = NULL;
    return head;
}

void init_list1(linklist head){
    head = malloc(sizeof(listnode));
    if(head == NULL)
    {
        perror("初始化失败");
        return NULL;
    }
    
    head->next = NULL;
}

// 新增一个节点
linklist new_node(int data)
{
    // 分配节点空间
    linklist p = malloc(sizeof(listnode));
    if(p == NULL)
    {
        perror("申请节点失败");
        return NULL;
    }

    // 存入数据
    p->data = data;
    p->next = NULL; // 不能不管，止野指针

    return p;
}

// 尾插法新增指定节点
void list_add_tail(linklist head, linklist new)
{
    // ① 找到尾结点
    linklist tail;
    for(tail=head; tail->next!=NULL; tail=tail->next);

    // ② 指向新尾结点
    tail->next = new;
}

void list_for_each(linklist head)
{
    if(head == NULL)
        return;
    linklist current_node = head->next;
    while(current_node != NULL)
    {
        printf("%d\t", current_node->data);
        current_node = current_node->next;
    }
    printf("\n");
    return;
}

void destory_list(linklist head)
{
    linklist p, k;
    for(p = head->next; p != NULL; k = p)
    {
        k = p->next;
        free(p);
    }

}